package cn.akwangl.tools.atomic;

import java.util.concurrent.atomic.AtomicInteger;

/**
 * Atomic常用方法演示.
 *
 * @author 阿坤同学
 * @date 2022-11-16 10:17
 */
public class CommonMethodDemo {

    private static AtomicInteger atomicInteger = new AtomicInteger(0);

    public static void main(String[] args) {
        System.out.println("自增: " + atomicInteger.incrementAndGet());
        System.out.println("自减: " + atomicInteger.decrementAndGet());

        System.out.println("获取当前的值，并自增: " + atomicInteger.getAndIncrement());
        System.out.println("获取当前的值，并自减: " + atomicInteger.getAndDecrement());

        // 获取当前的值
        System.out.println("获取当前值: " + atomicInteger.get());

        // 获取当前值，并设置新的值
        int currentValue = atomicInteger.getAndSet(8);
        System.out.println("currentValue: " + currentValue);
        // 获取当前的值，并加上预期的值
        currentValue = atomicInteger.getAndAdd(8);
        System.out.println("currentValue: " + currentValue);

        // 如果输入的数值等于预期值，则以原子方式将该值设置为输入值（update）
        boolean updateFlag = atomicInteger.compareAndSet(16, -1);
        System.out.println("当前值等于16并被更新为-1是否成功: " + updateFlag);
        System.out.println("获取当前值: " + atomicInteger.get());

        // 更新并返回上一个值
        int beforeUpdateValue = atomicInteger.getAndUpdate(x -> 900);
        System.out.println("更新之前的数据: " + beforeUpdateValue);
        System.out.println("更新之后的数据: " + atomicInteger.get());
    }
}
